package com.lzy.pattern.singleton.demo7;

import java.io.*;

/**
 * @ClassName: Client
 * @Description: 破坏单例设计模式：序列化和反序列化
 * 解决方法：在Singleton类中添加 readResolve() 方法，在反序列化时被反射调用，如果定义了这个方法，就返回这个方法的值，如果没有定义，则返回新new出来的对象。
 * @Author: LiuZy
 * @Date: 2022/4/10 15:43
 * @Version: 1.0
 */
public class Client {

    public static void main(String[] args) throws Exception{
        //步骤1：把对象写到文件中，序列化
//        writeObject2File();

        //步骤2：从文件读取对象，反序列化
        Singleton instance1 = readObjectFromFile();
        Singleton instance2 = readObjectFromFile();

        System.out.println(instance1);
        System.out.println(instance2);
        System.out.println(instance1 == instance2);
    }

    private static Singleton readObjectFromFile() throws IOException, ClassNotFoundException {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("/Users/lzy/mydata/tmp/a.txt"));
        Singleton instance = (Singleton) ois.readObject();
        return instance;
    }

    private static void writeObject2File() throws IOException {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("/Users/lzy/mydata/tmp/a.txt"));
        oos.writeObject(Singleton.getInstance());
        oos.close();
    }
}